package com.lft.stack;

/**
 * 定义一个类表示栈结构
 * 用数组模拟栈
 */
public class ArrayStack {
	/**
	 * 栈的大小
	 */
	private int maxSize;
	/**
	 * 数组，数组模拟栈，数据就放在该数组中。
	 */
	private int[] stack;
	
	/**
	 * top 表示为栈顶，初始化为-1
	 */
	private int top = -1;
	
	/**
	 * 构造器
	 * @param maxSize 初始化大小
	 */
	public ArrayStack(int maxSize) {
		this.maxSize = maxSize;
		stack = new int[this.maxSize];
	}
	
	/**
	 * 栈是否满
	 * @return
	 */
	public boolean isFull() {
		return top == maxSize - 1;
	}
	
	/**
	 * 栈是否空
	 * @return
	 */
	public boolean isEmpty() {
		return top == -1;
	}
	
	/**
	 * 入栈操作
	 * @param value 要放入栈中的数据
	 */
	public void push(int value) {
		// 判断栈是否满。
		if (isFull()) {
			System.out.println("栈已经满了，无法添加。");
			return;
		}
		top++;
		stack[top] = value;
	}
	
	/**
	 * 出栈操作
	 * @return
	 */
	public int pop() {
		if (isEmpty()) {
			throw new RuntimeException("栈空，栈中没有数据");
		}
		return stack[top--];
	}
	
	/**
	 * 遍历栈
	 */
	public void show() {
		if (isEmpty()) {
			System.out.println("栈空，栈中没有数据");
			return;
		}
		for (int i = top; i >= 0; i--) {
			System.out.printf("stack[ %d ] = %d\n", i, stack[i]);
		}
	}
}
